<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>如是的学习博客 - blog</title><meta name="author" content="rushiy"><meta name="copyright" content="rushiy"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="如是的学习博客">
<meta property="og:url" content="https://rushiy.gitee.io/page/3/index.html">
<meta property="og:site_name" content="如是的学习博客">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://rushiy.gitee.io/img/favicon.jpg">
<meta property="article:author" content="rushiy">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://rushiy.gitee.io/img/favicon.jpg"><link rel="shortcut icon" href="/img/favicon.jpg"><link rel="canonical" href="https://rushiy.gitee.io/page/3/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = { 
  root: '/',
  algolia: undefined,
  localSearch: undefined,
  translate: undefined,
  noticeOutdate: undefined,
  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
  copy: {
    success: '复制成功',
    error: '复制错误',
    noSupport: '浏览器不支持'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '',
  date_suffix: {
    just: '刚刚',
    min: '分钟前',
    hour: '小时前',
    day: '天前',
    month: '个月前'
  },
  copyright: undefined,
  lightbox: 'fancybox',
  Snackbar: undefined,
  source: {
    justifiedGallery: {
      js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
      css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
    }
  },
  isPhotoFigcaption: false,
  islazyload: false,
  isAnchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
  title: '如是的学习博客',
  isPost: false,
  isHome: true,
  isHighlightShrink: false,
  isToc: false,
  postUpdate: '2022-11-19 01:18:41'
}</script><noscript><style type="text/css">
  #nav {
    opacity: 1
  }
  .justified-gallery img {
    opacity: 1
  }

  #recent-posts time,
  #post-meta time {
    display: inline !important
  }
</style></noscript><script>(win=>{
    win.saveToLocal = {
      set: function setWithExpiry(key, value, ttl) {
        if (ttl === 0) return
        const now = new Date()
        const expiryDay = ttl * 86400000
        const item = {
          value: value,
          expiry: now.getTime() + expiryDay,
        }
        localStorage.setItem(key, JSON.stringify(item))
      },

      get: function getWithExpiry(key) {
        const itemStr = localStorage.getItem(key)

        if (!itemStr) {
          return undefined
        }
        const item = JSON.parse(itemStr)
        const now = new Date()

        if (now.getTime() > item.expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return item.value
      }
    }
  
    win.getScript = url => new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = url
      script.async = true
      script.onerror = reject
      script.onload = script.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        script.onload = script.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(script)
    })
  
      win.activateDarkMode = function () {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      win.activateLightMode = function () {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }
      const t = saveToLocal.get('theme')
    
          if (t === 'dark') activateDarkMode()
          else if (t === 'light') activateLightMode()
        
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        if (asideStatus === 'hide') {
          document.documentElement.classList.add('hide-aside')
        } else {
          document.documentElement.classList.remove('hide-aside')
        }
      }
    
    const detectApple = () => {
      if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
        document.documentElement.classList.add('apple')
      }
    }
    detectApple()
    })(window)</script><meta name="generator" content="Hexo 6.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/favicon.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">28</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">3</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">如是的学习博客</a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">如是的学习博客</h1><div id="site_social_icons"><a class="social-icon" href="mailto:rushiy@reg.email.cn" target="_blank" title="Email"><i class="fas fa-envelope"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/docker/docker%E7%9B%91%E6%8E%A7/" title="docker监控"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="docker监控"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/docker%E7%9B%91%E6%8E%A7/" title="docker监控">docker监控</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-24T15:27:51.000Z" title="发表于 2022-09-24 23:27:51">2022-09-24</time></span></div><div class="content">监控系统概述：

cAdvisor(container cAdvisor)：用于收集正在运行的容器资源使用和性能信息，在每个docker 主机上部署
  https://github.com/google/cAdvisor

Prometheus：容器监控系统，从cAdvisor收集并存储数据，官网https://prometheus.io/

Grafana：开源可视化展示系统，官网https://grafana.com/grafana


配置cAdvisor安装cAdvisor可通过GitHub中cAdvisor的运行容器命令，运行cAdvisor


1234567891011121314151617181920212223242526272829303132# docker run \  --volume=/:/rootfs:ro \  --volume=/var/run:/var/run:ro \  --volume=/sys:/sys:ro \  --volume=/var/lib/docker/:/var/lib/docker:ro \  --volume=/dev/d ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/docker/docker%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93/" title="docker镜像仓库"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="docker镜像仓库"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/docker%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93/" title="docker镜像仓库">docker镜像仓库</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-24T10:27:35.000Z" title="发表于 2022-09-24 18:27:35">2022-09-24</time></span></div><div class="content">docker镜像仓库启动容器时，docker daemon会试图从本地获取相关镜像，本地镜像不存在时，其将从Registry中下载该镜像并保存到本地

Docker Registry分类：
Registry用于保存docker镜像，包括镜像的层次结构和元数据，用户可自建Registry，也可以使用官方的Docker Hub仓库，分类如下：

Sponsor Registry：第三方仓库，供客户和docker社区使用

Mirror Registry：第三方仓库，只供客户使用

Vendor Registry：由发布docker镜像的供应商提供的Registry

Private Registry：通过设有防火墙和额外的安全层的私有实体提供的Registry，如VMware的harbor


Docker Registry的构成

Repository

由特定的docker镜像的所有迭代版本组成的镜像仓库，一个Registry中包含多个Repository
Repository可分为“顶级仓库”和“用户仓库“，用户仓库的格式为“用户名&#x2F;仓库名”
每个镜像可以包含多个Tag(标 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/docker/docker%E5%AD%98%E5%82%A8%E5%8D%B7/" title="docker存储卷"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="docker存储卷"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/docker%E5%AD%98%E5%82%A8%E5%8D%B7/" title="docker存储卷">docker存储卷</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-24T09:17:37.000Z" title="发表于 2022-09-24 17:17:37">2022-09-24</time></span></div><div class="content">将数据从宿主机挂载到容器中的三种方式：

bind mounts：将宿主机上的任意位置的文件或者目录挂载到容器中。
volumes：Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)，保存数据的最佳方法
tmpfs：挂载存储在主机系统的内存中，而不会写入主机的文件系统。如果不希望将数据持久化存储在任何位置，可以使用tmpfs，同时避免写入容器可写层提高性能(不常使用)。



bind mounts将宿主机目录映射给容器使用，可以通过直接修改宿主机上文件修改容器文件。

-v： 格式为-v 宿主机目录:容器目录
  在宿主机上新建nginx容器的根目录文件，并写入指定内容。


12345678910# 提前准备好nginx将要使用的根目录# tree /root/html/../html/├── date.html└── index.html0 directories, 2 files# cat /root/html/date.html  /root/html/index.html today is 2020-07-18welcome to ng ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/docker/docker%E5%AE%B9%E5%99%A8%E7%BD%91%E7%BB%9C/" title="docker容器网络"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="docker容器网络"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/docker%E5%AE%B9%E5%99%A8%E7%BD%91%E7%BB%9C/" title="docker容器网络">docker容器网络</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-24T06:54:14.000Z" title="发表于 2022-09-24 14:54:14">2022-09-24</time></span></div><div class="content">Docker使用Linux桥接，在宿主机虚拟一个Docker容器网桥(docker0)，Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址，称为Container IP，同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥，这样容器之间就能够通过容器的Container IP直接通信。
Docker网桥是宿主机虚拟出来的，并不是真实存在的网络设备，外部网络是无法寻址到的，这也意味着外部网络无法通过Container-IP直接访问到容器。如果容器希望被外部访问，可以通过映射容器端口到宿主主机（端口映射），即docker run创建容器时候通过 -p 或-P参数来启用，访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。
查看docker network相关命令
1234567891011121314151617181920# docker network lsNETWORK ID          NAME                DRIVER              SCOPEad1f746530ad         ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/docker/docker%E9%95%9C%E5%83%8F/" title="docker镜像"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="docker镜像"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/docker%E9%95%9C%E5%83%8F/" title="docker镜像">docker镜像</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-22T15:36:16.000Z" title="发表于 2022-09-22 23:36:16">2022-09-22</time></span></div><div class="content">镜像是容器的基石，容器基于镜像启动和运行。镜像保存的容器启动的各种条件(依赖)。Docker Image是一个层叠的只读文件系统。docker镜像具有以下特点：

Docker镜像采用分层构建机制，最底层是bootfs（引导文件系统）、其次是rootfs（用户文件系统）；
bootfs用于系统引导的文件系统，包括boot loader和kernel，容器启动完成后会卸载以节约内存空间；
rootfs位于bootfs之上，表现为docker容器的根文件系统：传统模式中，系统启动之时，内核挂载rootfs时会首先将其挂载为“只读”模式，完整性自检完成后将其重新挂载为读写模式（Linux系统启动模式）；docker中，rootfs由内核挂载为“只读”模式，而后通过“联合挂载”技术额外挂载一个“可写”层；

下图中，位于下层的镜像为父镜像（parent image），最底层成为基础镜像（base image），最上层为“可读写”层，其下的均为“只读”层。
![img]&#x2F;pic&#x2F;docker-pic&#x2F;docker-pic&#x2F;clip_image052.jpg ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/docker/%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%E5%8F%8Adocker%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E7%AE%A1%E7%90%86/" title="运行容器及docker生命周期管理"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="运行容器及docker生命周期管理"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%E5%8F%8Adocker%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E7%AE%A1%E7%90%86/" title="运行容器及docker生命周期管理">运行容器及docker生命周期管理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-22T13:53:57.000Z" title="发表于 2022-09-22 21:53:57">2022-09-22</time></span></div><div class="content">运行容器容器通过镜像启动。镜像出现在Docker生命周期中的构建和打包阶段，容器存在于启动和执行阶段。

当一个容器启动时，Docker会在镜像的最顶层加载一个读写文件系统。程序就在这一层执行，第一个启动时，这一层是空的，当文件系统变化时，都会应用到这一层。
写时复制。如果想要修改一文件，就会先将它复制到可写层。
Docker容器的能力 ：

文件系统隔离：每个容器都有自己的root文件系统。
进程隔离：每个容器都运行在自己的进程环境中。
网络隔离：容器间的虚拟网络接口和IP地址都是分开的。
资源隔离和分组：使用cgroups将CPU和内存之间的资源独立分配给每个Docker容器。

运行一次性容器该类型的容器的特点是执行完任务后就自动销毁。
Docker允许用户在容器内运行应用程序，使用 docker run命令来在容器内运行一个应用程序。
12345678910# docker container run ubuntu:15.10 /bin/echo &quot;Hello world&quot;Unable to find image &#x27;ubuntu:15.10&#x2 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/docker/%E5%AE%89%E8%A3%85docker/" title="安装docker"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="安装docker"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/%E5%AE%89%E8%A3%85docker/" title="安装docker">安装docker</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-22T04:49:33.000Z" title="发表于 2022-09-22 12:49:33">2022-09-22</time></span></div><div class="content">yum在线安装：Linux系统自带了docker软件包，但该软件包版本较低，一般不使用系统自带的docker。
我们可以在虚拟机中使用yum repolist命令，同步系统自带的软件包，发现结果都是1.13.1版本的docker，如下：
12345678910111213141516171819202122232425# yum info docker  # 查看服务器上的docker信息Loaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.comAvailable PackagesName        : docker   # 软件包名称Arch        : x86_64   # 适用平台Epoch       : 2Version     : 1.13.1   # docker版本信息Release     : 162.gi ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/docker/%E8%B5%B0%E8%BF%9Bdocker/" title="走进docker"><img class="post_bg" src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="走进docker"></a></div><div class="recent-post-info"><a class="article-title" href="/docker/%E8%B5%B0%E8%BF%9Bdocker/" title="走进docker">走进docker</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-09-22T03:29:34.000Z" title="发表于 2022-09-22 11:29:34">2022-09-22</time></span></div><div class="content">什么是容器？容器技术是一种虚拟化的方案。容器虚拟化也就是操作系统级别的虚拟化，只能运行相同或相似内核的操作系统(也就是说一个基于ubuntu的容器能够运行在centos之上)。Docker使用的容器技术依赖于Linux内核的Namespaces和Cgroups，这两个技术就是为了让操作系统资源被区隔成独立区间。
容器依赖Linux内核特性：

Namespaces：命名空间
Controller groups（cgroups）：控制组

NameSpace为确保提供的是轻量级虚拟化服务，Docker使用了NameSpace。命名空间提供了系统资源的隔离，资源包括进程、网络、文件系统等。
在同一个Namespace下的进程可以感知彼此的变化，而对其他的Namespace一无所知。让容器置身于独立的系统环境中。
Namespace的种类 ：

PID（Process ID） ：进程隔离
NET（Network） ：管理网络接口
IPC（InterProcess Communication） ：管理跨进程通信的访问
MNT（Mount） ：管理挂载点
UTS（Unix Timesharing ...</div></div></div><nav id="pagination"><div class="pagination"><a class="extend prev" rel="prev" href="/page/2/#content-inner"><i class="fas fa-chevron-left fa-fw"></i></a><a class="page-number" href="/">1</a><a class="page-number" href="/page/2/#content-inner">2</a><span class="page-number current">3</span></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/favicon.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">rushiy</div><div class="author-info__description"></div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">28</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">3</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><div class="card-info-social-icons is-center"><a class="social-icon" href="mailto:rushiy@reg.email.cn" target="_blank" title="Email"><i class="fas fa-envelope"></i></a></div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/django/Django%E6%A8%A1%E6%9D%BF%E7%B3%BB%E7%BB%9F/" title="Django模板系统"><img src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Django模板系统"/></a><div class="content"><a class="title" href="/django/Django%E6%A8%A1%E6%9D%BF%E7%B3%BB%E7%BB%9F/" title="Django模板系统">Django模板系统</a><time datetime="2022-11-04T07:08:03.000Z" title="发表于 2022-11-04 15:08:03">2022-11-04</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/django/Django%E8%A7%86%E5%9B%BE/" title="Django视图"><img src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Django视图"/></a><div class="content"><a class="title" href="/django/Django%E8%A7%86%E5%9B%BE/" title="Django视图">Django视图</a><time datetime="2022-11-03T07:07:51.000Z" title="发表于 2022-11-03 15:07:51">2022-11-03</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/django/Django%E8%B7%AF%E7%94%B1%E7%B3%BB%E7%BB%9F/" title="Django路由系统"><img src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Django路由系统"/></a><div class="content"><a class="title" href="/django/Django%E8%B7%AF%E7%94%B1%E7%B3%BB%E7%BB%9F/" title="Django路由系统">Django路由系统</a><time datetime="2022-11-02T07:07:34.000Z" title="发表于 2022-11-02 15:07:34">2022-11-02</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/django/%E8%B5%B0%E8%BF%9BDjango/" title="走进Django"><img src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="走进Django"/></a><div class="content"><a class="title" href="/django/%E8%B5%B0%E8%BF%9BDjango/" title="走进Django">走进Django</a><time datetime="2022-11-01T07:01:20.000Z" title="发表于 2022-11-01 15:01:20">2022-11-01</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/python/python%E5%B8%B8%E7%94%A8%E6%A8%A1%E5%9D%97/" title="python常用模块"><img src="" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="python常用模块"/></a><div class="content"><a class="title" href="/python/python%E5%B8%B8%E7%94%A8%E6%A8%A1%E5%9D%97/" title="python常用模块">python常用模块</a><time datetime="2022-10-28T15:34:07.000Z" title="发表于 2022-10-28 23:34:07">2022-10-28</time></div></div></div></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/django/" style="font-size: 1.1em; color: #999">django</a> <a href="/tags/docker/" style="font-size: 1.3em; color: #99a1ac">docker</a> <a href="/tags/python/" style="font-size: 1.5em; color: #99a9bf">python</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/11/"><span class="card-archive-list-date">十一月 2022</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/10/"><span class="card-archive-list-date">十月 2022</span><span class="card-archive-list-count">16</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/09/"><span class="card-archive-list-date">九月 2022</span><span class="card-archive-list-count">8</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">28</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2022-11-18T17:18:40.301Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">&copy;2022 By rushiy</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.min.js"></script><div class="js-pjax"></div><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/activate-power-mode.min.js"></script><script>POWERMODE.colorful = true;
POWERMODE.shake = true;
POWERMODE.mobile = false;
document.body.addEventListener('input', POWERMODE);
</script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>